/***********************************************************************
 * Module:  EssaiOrCourse.java
 * Author:  bbc
 * Purpose: Defines the Class EssaiOrCourse
 ***********************************************************************/

package chrono_model;

import java.util.*;


/** Une course contient la liste des voitures qui y participent, et fais partie d'un evenement */
public class EssaiOrCourse {
	private String nomEssaiOrCourse_;
	private java.util.Date heureDebut_;
	private java.util.Date heureFin_;
	private TypeEssaiOrCourse typeEssaiOrCourse_;
	private boolean departAutomatique_;
	private TypeFin typeDeFin_;
	private int nbToursMax_;
	private float dureeMaxPilotage_;
	private float dureeConsecutiveMaxPilotage_;
	private String commentaire_;

	private java.util.List<Voiture> collectionVoiture_;


	/**
	 * permet d'ajouter une nouvelle voiture � la course
	 * @param newVoiture
	 * precondition :  @param doit avoir �t� cr��e au pr�alable et est issue d'une liste contenant toutes les voitures 
	 */
	public void ajouterVoiture(Voiture newVoiture) {
		// TODO: implement
		if (newVoiture == null)
			/* ajouter ici un popup qui permettra d'afficher "pas de voiture selectionn�e" */
			return;
		if (this.collectionVoiture_ == null)
			this.collectionVoiture_ = new ArrayList<Voiture>();
		if (!this.collectionVoiture_.contains(newVoiture)){
			this.collectionVoiture_.add(newVoiture);
		}else{
			/* ajouter ici un popup qui permettra d'afficher "la voiture a d�j� �t� ajout�e" */
		}
	}
	/**
	 * permet de retirer une voiture de la course
	 * @param newVoiture
	 * 
	 */
	public void retirerVoiture(Voiture voitureSelected) {
		// TODO: implement
		if (voitureSelected == null)
			/* ajouter ici une m�thode qui permettra d'afficher "pas de voiture selectionn�e" */
			return;
		if (this.collectionVoiture_ != null){
			if (this.collectionVoiture_.contains(voitureSelected)){
				this.collectionVoiture_.remove(voitureSelected);
			}else{
				/* ajouter ici une m�thode qui permettra d'afficher "pas de voiture � retirer" */
			}

		}
	}
	/**
	 * permet de sauvegarder une nouvelle nouvelle course ou de modifier une d�j� existante en r�cup�rant le fichier xml
	 * @param pcourse
	 * 
	 */
	public void sauvegarderCourse(EssaiOrCourse pcourse) {
		// TODO: implement
		if(pcourse == null){
			pcourse=new EssaiOrCourse();
			/* récupérer les champs depuis l'ihm pour la mettre dans l'objet*/ 

		}else{
			/* récupérer les champs depuis l'ihm pour la mettre dans l'objet*/ 
		}
		/* ajouter une méthode permettant d'enregistrer dans un fichier xml */
	}
	/**
	 * associe un top à une voiture
	 * @param pVoiture
	 * @param pOldVoiture 
	 * @param ptop
	 */
	public void associerTopAVoiture(Voiture pNewVoiture, Voiture pOldVoiture, Top ptop) {
		
		if(pNewVoiture.getCollectionTops_()==null){
			List<Top> listTop=new ArrayList<Top>();
			pNewVoiture.setCollectionTops_(listTop);
		}
		
		// vérifie s'il y est nécessaire de desassocier d'abord le top à la voiture 
		if(pOldVoiture!=null){
			dessassocierTopDeVoiture(pOldVoiture, ptop);
		}
		List<Top> listTop=pNewVoiture.getCollectionTops_();
		listTop.add(ptop);
		/* ajouter une méthode permettant de mettre à jour le fichier xml */
	}
	/**
	 * permet de d'enlever un top de la liste des tops d'une voiture selectionnée
	 * @param pVoiture 
	 * @param ptop
	 */
	public void dessassocierTopDeVoiture(Voiture pVoiture, Top ptop) {
		List<Top> listTop=pVoiture.getCollectionTops_();
		if(listTop.contains(ptop)){
			pVoiture.removeCollectionTops_(ptop);
		}
		/* ajouter une méthode permettant de mettre à jour le fichier xml */
	}

	/** @pdGenerated default iterator getter */
	public java.util.Iterator getIteratorCollectionVoiture_() {
		if (collectionVoiture_ == null)
			collectionVoiture_ = new java.util.ArrayList<Voiture>();
		return collectionVoiture_.iterator();
	}

	//   /** @pdGenerated default getter */
	//   public java.util.List<Voiture> getCollectionVoiture_() {
	//      if (collectionVoiture_ == null)
	//         collectionVoiture_ = new java.util.ArrayList<Voiture>();
	//      return collectionVoiture_;
	//   }
	//   
	//   
	//   /** @pdGenerated default setter
	//     * @param newCollectionVoiture_ */
	//   public void setCollectionVoiture_(java.util.List<Voiture> newCollectionVoiture_) {
	//      removeAllCollectionVoiture_();
	//      for (java.util.Iterator iter = newCollectionVoiture_.iterator(); iter.hasNext();)
	//         addCollectionVoiture_((Voiture)iter.next());
	//   }
	//   
	//   
	//   /** @pdGenerated default removeAll */
	//   public void removeAllCollectionVoiture_() {
	//      if (collectionVoiture_ != null)
	//         collectionVoiture_.clear();
	//   }

	/**
	 *  
	 * @return collectionVoitureSize
	 */
	public int getSizeCollectionVoiture(){
		return this.collectionVoiture_.size();
	}
}